package enums;

import java.util.HashMap;
import java.util.Map;

import model.Utility;

/**
 * Provides the text shown in every GUI.
 */
public enum GUIText {
	ABRECHNUNG("Abrechnung"), 
	ABRECHNUNGENERSTELLEN("Abrechnungen erstellen"), 
	EDIT("Edit"), 
	CHANGEPW("Passwort ändern"), 
	ENTERPW("Passwort eingeben"), 
	BLUEHOUSESHOP("Hausladen Blaues Haus"), 
	LOGOUT("Logout"), 
	KIND("Art"), 
	CRATE("Kasten"), 
	BOTTLES("Flaschen"), 
	COUNT("Anzahl"), 
	DEPOSITBACK("Pfandrückgabe"), 
	TOPAY("zu zahlen"), 
	WHOLE("Gesamt"), 
	GIVEN("Gegeben"), 
	CHANGE("Rückgeld"), 
	PAY("Zahlen"), 
	DELETE("Löschen"), 
	DEPOSIT("Pfand"), 
	OLDPW("Altes Passwort"), 
	NEWPW("Neues Passwort"), 
	VALIDATENEWPW("Neues Passwort bestätigen"), 
	OK("Ok"), 
	CANCEL("Abbrechen"), 
	SIGNIN("Sign In"), 
	NICKNAME("Nickname"), 
	PASSWORD("Passwort"), 
	ACTUALCASH("Kassenstand"), 
	TOKEN("Waschmarke"), 
	TRAYS("Kästen"), 
	CHECK("Check"), 
	TAKEANORDER("Bestellung annehmen"), 
	ORDER("Bestellung"), 
	OVERVIEW("Übersicht"), 
	HISTORY("Historie"), 
	ACTIVEDEBT("Ausstehende Rechnungen"), 
	INVOICE("Rechnung"), 
	PAID("Zahlung erhalten"), 
	MONATSBILANZ("Monatsbilanz"),
	LOHNKOSTENABRECHNUNG("Lohnkostenabrechnung"),
	SAVE("Speichern"), 
	FIRSTNAME("Vorname"),
	LASTNAME("Nachname"),
	MAIL("E-Mail"),
	ROOM("Zimmernummer"), 
	CUSTOMERNAME("Kundenname"), 
	PERSON("Person"), 
	STAFF("Personal"), 
	NEW("Neu"), 
	INVENTORY("Inventur"), 
	DATE("Datum"), 
	COMMENT("Kommentar"), 
	CUSTOMER("Kunde"), 
	NAME("Name"), 
	COST("Einkaufskosten"), 
	SALEPRICE("Verkaufspreis"), 
	CATEGORY("Kategorie"), 
	MULTIPLICATOR("Anzahl Produkte\npro großer Verkaufseinheit"),
	MAXSTOCK("max. Lagerbestand"),
	STOCK("Lagerbestand"),
	REPLACEMENT("Ersatz"),
	PRODUCT("Produkt"), PROPERTIES("Eigenschaften"), 
	EDITCUSTOMER(Utility.concatStrings(EDIT.toString()," ", CUSTOMER.toString())),
	EDITPRODUCT(Utility.concatStrings(EDIT.toString()," ", PRODUCT.toString())),
	EDITSTAFF(Utility.concatStrings(EDIT.toString()," ", STAFF.toString())),
	EDITPERSON(Utility.concatStrings(EDIT.toString()," ", PERSON.toString())),
	NEWCUSTOMER(Utility.concatStrings("Neuer ", CUSTOMER.toString())),
	NEWPRODUCT(Utility.concatStrings("Neues ", PRODUCT.toString())),
	NEWSTAFF(Utility.concatStrings("Neues ", STAFF.toString())),
	NEWPERSON(Utility.concatStrings("Neue ", PERSON.toString())), 
	TRAYCOUNT("Anzahl belegter Kästen"), 
	REVENUE("Umsatz"), 
	MONTH("Monat"), CHART("Diagramme"), 
	PROFIT("Gewinn"), 
	VERLAUF("Verlauf"), BEGIN("Anfang"), END("Ende"), 
	REPLACEMENTTABLE("Wartende Ersatz Produkte"), ALREADYINVOICED("Abrechnungen wurden bereits erzeugt!");

	/**
	 * name as String for a Message
	 */
	private final String name;
	
	/**
	 * Map of all existing Messages
	 */
	private static final Map<String, GUIText> stringToMenuItem = new HashMap<>();

	static {
		for (GUIText f : GUIText.values()) {
			stringToMenuItem.put(f.toString(), f);
		}
	}

	/**
	 * Standard constructor of a message
	 * 
	 * @param name which will be added to a single Reason
	 */
	private GUIText(String name) {
		this.name = name;
	}

	/**
	 * Returns a String for a message
	 */
	@Override
	public String toString() {
		return name;
	}
	/**
	 * Returns a Message for a String
	 *
	 * @param s String which will be transformed into a Reason
	 * @return the Reason
	 */
	public static GUIText fromString(String s){
		return GUIText.stringToMenuItem.get(s);
	}
}
